﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGEB.Prototipo.control;
using SIGEB.Modelo.moduloPerfiles;

namespace SIGEB.Prototipo.Vista
{
    public partial class frm_cambioContrasena : frm_Base
    {
        #region constructores

        public frm_cambioContrasena()
        {
            InitializeComponent();
        }

        public frm_cambioContrasena(Control.controlPrincipal cp, string idUsuario, int modo = 0):base(cp)
        {
            this.cp = cp;
            this.modo = modo;
            this.idUsuario = idUsuario;
            InitializeComponent();
            asignarUI(this.Controls);
            txt_passActual.Font = new Font(FontFamily.GenericSansSerif, 12f);
            txt_passNuevo.Font = new Font(FontFamily.GenericSansSerif, 12f);
            txt_passRepita.Font = new Font(FontFamily.GenericSansSerif, 12f);
            aplicarModo();
        }

        #endregion

        #region eventos

        private void btn_Reestablecer_Click(object sender, EventArgs e)
        {
            if (cp.ctrlUsuario.existeUsuario(idUsuario))
            {
                cp.ctrlUsuario.actualizarPassword(idUsuario, "biblioteca");
                mostrarInfo("Reestablecimiento de contraseña efectuado de manera exitosa.");
            }
            else
            {
                mostrarInfo("Ha ocurrido un error al obtener usuario.");
            }
            Close();
        }

        private void btn_asignar_Click(object sender, EventArgs e)
        {
            if(modo.Equals(0))
            {
                if (!Validacion.LongitudCadenaValida(txt_passNuevo.Text, true, 50))
                {
                    setError(txt_passNuevo, "Ingrese una contraseña nueva.");
                }
                else if(txt_passNuevo.Text.Equals("biblioteca"))
                {
                    setError(txt_passNuevo, "La contraseña nueva debe ser distinta a la contraseña predeterminada del sistema.");
                }
                else
                {
                    borrarError(txt_passNuevo);
                }
                if (!Validacion.LongitudCadenaValida(txt_passRepita.Text, true, 50))
                {
                    setError(txt_passRepita, "Debe reingresar la contraseña nueva,");
                }
                else if(txt_passNuevo.Text != txt_passRepita.Text)
                {
                    setError(txt_passRepita, "Ambas contraseñas deben coincidir.");
                }
                else
                {
                    borrarError(txt_passRepita);
                }
                if(erp_error.GetError(txt_passNuevo).Equals(string.Empty) && erp_error.GetError(txt_passRepita).Equals(string.Empty))
                {
                    //SIGEB.Modelo.moduloUsuarios.usuario usr = cp.ctrlUsuario.obtenerUsuario(idUsuario); //.usuarioActual();
                    if (cp.ctrlUsuario.existeUsuario(idUsuario))
                    {
                        cp.ctrlUsuario.actualizarPassword(idUsuario, txt_passNuevo.Text);
                        mostrarInfo("Asignación de contraseña efectuada de manera exitosa.");
                    }
                    else
                    {
                        mostrarInfo("Ha ocurrido un error al obtener usuario.");
                    }
                    Close();
                }
            }
            else if(modo.Equals(1))
            {
                if(!Validacion.LongitudCadenaValida(txt_passActual.Text, true, 50))
                {
                    setError(txt_passActual, "Ingrese la contraseña actual.");
                }
                else if(!cp.ctrlUsuario.MatchPassUser(idUsuario, txt_passActual.Text))
                {
                    setError(txt_passActual, "Contraseña ingresada como actual es inválida.");
                }
                else
                {
                    borrarError(txt_passActual);
                }
                if (!Validacion.LongitudCadenaValida(txt_passNuevo.Text, true, 50))
                {
                    setError(txt_passNuevo, "Ingrese una contraseña nueva.");
                }
                else if (txt_passNuevo.Text.Equals("biblioteca"))
                {
                    setError(txt_passNuevo, "La contraseña nueva debe ser distinta a la contraseña predeterminada del sistema.");
                }
                else
                {
                    borrarError(txt_passNuevo);
                }
                if (!Validacion.LongitudCadenaValida(txt_passRepita.Text, true, 50))
                {
                    setError(txt_passRepita, "Debe reingresar la contraseña nueva.");
                }
                else if (txt_passNuevo.Text != txt_passRepita.Text)
                {
                    setError(txt_passRepita, "Ambas contraseñas deben coincidir.");
                }
                else
                {
                    borrarError(txt_passRepita);
                }
                if (erp_error.GetError(txt_passActual).Equals(string.Empty) && erp_error.GetError(txt_passNuevo).Equals(string.Empty) && erp_error.GetError(txt_passRepita).Equals(string.Empty))
                {
                    //SIGEB.Modelo.moduloUsuarios.usuario usr = cp.ctrlUsuario.obtenerUsuario(idUsuario); //.usuarioActual();
                    if (cp.ctrlUsuario.existeUsuario(idUsuario))
                    {
                        cp.ctrlUsuario.actualizarPassword(idUsuario, txt_passNuevo.Text);
                        mostrarInfo("Cambio de contraseña efectuado de manera exitosa.");
                    }
                    else
                    {
                        mostrarInfo("Ha ocurrido un error al obtener usuario.");
                    }
                    Close();
                }
            }
        }

        #endregion

        #region metodos

        public override void actualizar(object referencia, bibliotecaObservador.EventoActualizacion e)
        {
            //base.actualizar(referencia, e);       
        }

        private void aplicarModo()
        {
            if (cp.UsuarioActual.Equals(idUsuario))
            {
                switch (modo)
                {
                    case 0: modoAsignacion(); break;
                    case 1: modoCambio(); break;
                }
            }
            else
            {
                if (cp.usuarioActualPuede(acciones.USER_MODIFICAR_TOD))
                {
                    btn_Reestablecer.Enabled = true;
                }
            }
        }

        private void modoAsignacion()
        {
            lbl_passActual.Enabled = false;
            txt_passActual.Enabled = false;
            lbl_passNuevo.Enabled = true;
            txt_passNuevo.Enabled = true;
            lbl_passRepita.Enabled = true;
            txt_passRepita.Enabled = true;
            btn_asignar.Enabled = true;
            btn_asignar.Text = "Asignar Contraseña";
            this.Text = "Asignación de Contraseña - SIGEB";
        }

        private void modoCambio()
        {
            lbl_passActual.Enabled = true;
            txt_passActual.Enabled = true;
            lbl_passNuevo.Enabled = true;
            txt_passNuevo.Enabled = true;
            lbl_passRepita.Enabled = true;
            txt_passRepita.Enabled = true;
            btn_asignar.Enabled = true;
            btn_asignar.Text = "Cambiar Contraseña";
            this.Text = "Cambio de Contraseña - SIGEB";
        }

        #endregion

        #region atributos

        private int modo;
        private string idUsuario;

        #endregion
    }
}
